package movimiento.patrones;

import movimiento.*;
import objetos.ObjetoMovil;
import auxiliares.Vector;

/*
 * Patron usado para rastrear un objetivo. Avanza en el eje y segun la velocidad dada,
 * y en el eje x se mueve hacia donde esta su objetivo (izquierda, derecha, o no se 
 * mueve) segun el modulo de la velocidad dada.
 */
public class Rastrear extends PatronMovimiento {
	private ObjetoMovil objetivo = null;

	public Rastrear() {
	}

	public Rastrear(ObjetoMovil objetivo) {
		super();
		this.objetivo = objetivo;
	}

	public ObjetoMovil getObjetivo() {
		return objetivo;
	}

	public void setObjetivo(ObjetoMovil objetivo) {
		this.objetivo = objetivo;
	}

	@Override
	public Posicion calcularNuevaPosicion(Posicion posicion, Vector velocidad) {
		int xFinal, yFinal;
		int xInicial = posicion.getEnX();
		int yInicial = posicion.getEnY();
		int vX = velocidad.getComponenteX();

		yFinal = yInicial + velocidad.getComponenteY();
		if (objetivo == null) {
			xFinal = xInicial;
		} else {
			if (objetivo.getPosicion().getEnX() == xInicial) {
				xFinal = xInicial;
			} else if (objetivo.getPosicion().getEnX() > xInicial) {
				/* El objetivo esta mas a la derecha que el misil */
				xFinal = xInicial + vX * Integer.signum(vX);
			} else {
				/* El objetivo esta mas a la izquierda que el misil */
				xFinal = xInicial - vX * Integer.signum(vX);
			}
		}
		return new Posicion(xFinal, yFinal);
	}

}
